package com.qf.ssm.service.impl;

import com.qf.ssm.mapper.MenusMapper;
import com.qf.ssm.pojo.BaseUser;
import com.qf.ssm.pojo.Menu;
import com.qf.ssm.pojo.Menus;
import com.qf.ssm.pojo.Role;
import com.qf.ssm.service.MenusService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class MenusServiceImpl implements MenusService {

    private MenusMapper menusMapper;

    @Autowired
    public void setMenusMapper(MenusMapper menusMapper) {
        this.menusMapper = menusMapper;
    }

    @Override
    public List<Menu> findAllMenus() {
        return menusMapper.findAllMenus();
    }

    @Override
    public List<Menu> findMenuByRoleId(Long rid) {
        return menusMapper.findMenuByRoleId(rid);
    }

    @Override
    public List<Menu> findAllLeftMenus() {
       //经过测试，我们发现直接返回所有的数据会出错，因为不是所有的用户都有权限访问这些地址
        //应该返回的是当前用户有的东西
        //获取到当前登陆的用户的授权信息
        BaseUser baseUser = (BaseUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        //获取内部保存的所有的角色
        List<Role> roleList = baseUser.getRoleList();//获取当前登录用户的所有角色
        List<Menu>userMenus=new ArrayList();//保存当前用户左侧菜单的集合
        //遍历用户的角色,找到用户在左侧显示的数据,也就是类型为 1 的数据
        roleList.forEach(role -> {
            userMenus.addAll(role.getMenuList().stream().filter(menu -> {
                return menu.getType()==1L;
            }).collect(Collectors.toSet()));
        });
        return userMenus;
    }
}
